package com.linzm.leetcode.primary.exercises3_20230122;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author zimingl
 * @Date 2023/1/25 0:11
 * @Description: 矩阵中的幸运数
 */
public class Demo19_1380 {
    /**
     * 给你一个 m * n 的矩阵，矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
     * 幸运数 是指矩阵中满足同时下列两个条件的元素：
     * 在同一行的所有元素中最小
     * 在同一列的所有元素中最大
     */
    public static void main(String[] args) {
        int[][] matrix = {{3,7,8},{9,11,13},{15,16,17}};
        Demo19_1380 demo19_1380 = new Demo19_1380();
        List<Integer> list = demo19_1380.luckyNumbers(matrix);
        String[] strings = list.stream().map(String::valueOf).toArray(String[]::new);
        System.out.println(String.join(" ", strings));
    }

    private List<Integer> luckyNumbers (int[][] matrix) {
        List<Integer> rowMin = new ArrayList<>();
        List<Integer> colMax = new ArrayList<>();
        for (int i = 0; i < matrix.length; i++) {
            int min = Integer.MAX_VALUE;
            for (int j = 0; j < matrix[i].length; j++) {
                min = Math.min(min, matrix[i][j]);
            }
            rowMin.add(min);
        }
        for (int i = 0; i < matrix[0].length; i++) {
            int max = Integer.MIN_VALUE;
            for (int j = 0; j < matrix.length; j++) {
                max = Math.max(max, matrix[j][i]);
            }
            colMax.add(max);
        }
        return rowMin.stream().filter(colMax::contains).collect(Collectors.toList());
    }

}
